package net.lzzy.practicesapi1.repositeries;

import net.lzzy.practicesapi1.entities.Course;
import net.lzzy.practicesapi1.entities.User;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.UUID;

/**
 * @author 梁园钲
 */
public interface CourseRepository extends JpaRepository<Course, UUID>{
    /**查询所有课程记录按时间倒序
     * @return 所有课程记录
     */
    List<Course> findAllByOrderByUpdateTimeDesc();

    /**
     * 分页查找所有课程记录
     * @param pageable 分页参数
     * @return 分页的课程记录
     */
    List<Course> findAllByOrderByUpdateTimeDesc(Pageable pageable);

    /**
     * 查找所有开放/未开放的课程
     * @param open 是否开放课程
     * @return 开放/未开放课程
     */
    List<Course> findCoursesByOpenEqualsOrderByUpdateTimeDesc(boolean open);

    /**
     * 分页查找所有开放/未开放的课程
     * @param pageable 分页参数
     * @param open 是否开放课程
     * @return 分页的开放/未开放课程
     */
    List<Course> findCoursesByOpenEqualsOrderByUpdateTimeDesc(Pageable pageable,boolean open);

    /** 返回Course表所有数据记录
     * @return 用户记录数
     */
    Integer countAllBy();

    /**
     * 返回开放/未开放课程
     * @param open 是否开放
     * @return 数量
     */
    Integer countCoursesByOpenEquals(boolean open);

    /**
     * 查找某教师的课程集合，并按课程创建时间排序
     * @param id 教师id
     * @return 教师课程集合
     */
    List<Course> findCoursesByTeacherIdEqualsOrderByCreateTime(UUID id);

    /**
     * 查找包含某学生的所有开放课程
     * @param student 该学生对象
     * @param open 是否开放课程
     * @return 返回符合条件的集合
     */
    List<Course> findCoursesByStudentsContainsAndOpenOrderByUpdateTimeDesc(User student,boolean open);
}
